#include "pch.hpp"
#include "Glyph.hpp"




Glyph::Glyph()
{}
///////////////////////////////////////////////////////////////////////////////////////////////////

Glyph::Glyph(int2 pos, intsize2 size)
	: m_pos(pos)
	, m_size(size)
{}
///////////////////////////////////////////////////////////////////////////////////////////////////

Glyph::Glyph(QDomElement glyph, QDir path)
{
	// The name attribute is optional
	//if(!glyph.hasAttribute("name")) throw exception("missing 'name' attribute in glyph element") << debug_info();
	if(!glyph.hasAttribute("x")) BOOSTEXT_THROW(exception("missing 'x' attribute in glyph element"));
	if(!glyph.hasAttribute("y")) BOOSTEXT_THROW(exception("missing 'y' attribute in glyph element"));
	if(!glyph.hasAttribute("w")) BOOSTEXT_THROW(exception("missing 'w' attribute in glyph element"));
	if(!glyph.hasAttribute("h")) BOOSTEXT_THROW(exception("missing 'h' attribute in glyph element"));

	m_name = glyph.attribute("name");
	m_pos  = int2(glyph.attribute("x").toInt(), glyph.attribute("y").toInt());
	m_size = intsize2(glyph.attribute("w").toInt(), glyph.attribute("h").toInt());
}
///////////////////////////////////////////////////////////////////////////////////////////////////

Glyph::~Glyph()
{}
///////////////////////////////////////////////////////////////////////////////////////////////////




QString Glyph::name() const
{
	return m_name;
}
///////////////////////////////////////////////////////////////////////////////////////////////////

math::rectangle<int> Glyph::rect() const
{
	return math::rectangle<int>::pointSize(m_pos, m_size);
}
///////////////////////////////////////////////////////////////////////////////////////////////////

int2 Glyph::pos() const
{
	return m_pos;
}
///////////////////////////////////////////////////////////////////////////////////////////////////

intsize2 Glyph::size() const
{
	return m_size;
}
///////////////////////////////////////////////////////////////////////////////////////////////////




void Glyph::setPos(int2 pos)
{
	m_pos = pos;
}
///////////////////////////////////////////////////////////////////////////////////////////////////

void Glyph::move(int2 delta)
{
	m_pos += delta;
}
///////////////////////////////////////////////////////////////////////////////////////////////////




Quad Glyph::quad() const
{
	return Quad(int2(0, 0), m_size, float2(m_pos.x, m_pos.y), floatsize2(m_size.width, m_size.height));
}
///////////////////////////////////////////////////////////////////////////////////////////////////

QDomElement Glyph::domElement(QDomDocument& document) const
{
	QDomElement element = document.createElement("glyph");
	setAttributes(element);
	return element;
}
///////////////////////////////////////////////////////////////////////////////////////////////////

void Glyph::setAttributes(QDomElement& element) const
{
	if(!m_name.isEmpty())
		element.setAttribute("name", m_name);

	element.setAttribute("x", m_pos.x);
	element.setAttribute("y", m_pos.y);
	element.setAttribute("w", m_size.width);
	element.setAttribute("h", m_size.height);
}
///////////////////////////////////////////////////////////////////////////////////////////////////
